package com.lyd.shard.encrypt;

import cn.hutool.core.codec.Base64;
import lombok.Getter;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
import org.apache.shardingsphere.encrypt.spi.context.EncryptContext;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * 描述 Base64转码算法
 *
 * @author liyadong
 * @date 2024-05-15 14:04
 */
@Getter
public class Base64EncryptAlgorithm implements EncryptAlgorithm<String, String> {
    private Properties props;

    /**
     * 描述      初始化算法
     * @param	props	配置信息
     * @author liyadong
     * @date 2024/5/15 15:27
     */
    @Override
    public void init(final Properties props) {
        this.props = props;
    }

    @Override
    public String getType() {
        // 返回自定义加密算法的名称
        return "BASE64";
    }

    /**
     * 描述   加密
     * @param	plainValue      明文
     * @param	encryptContext  加密信息（加密字段、表名等）
     * @author liyadong
     * @date 2024/5/15 15:27
     * @return java.lang.String
     */
    @Override
    public String encrypt(final String plainValue, EncryptContext encryptContext) {
        return plainValue == null ? null : Base64.encode(plainValue);
    }

    /**
     * 描述      解密
     * @param	encode	        秘文
     * @param	encryptContext  加密信息（加密字段、表名等）
     * @author liyadong
     * @date 2024/5/15 15:28
     * @return java.lang.String
     */
    @Override
    public String decrypt(String encode, EncryptContext encryptContext) {
        return Base64.decodeStr(encode);
    }
}
